#pragma once 
#include <iostream>

#include "log.hpp"
#include "TcpServer.hpp"
#include "read_one_line.hpp"
#include "thread_pool.hpp"

#define PORT 8080

class HttpServer
{
private:

    int _port ; 
    bool _stop ;

public:

    HttpServer(int port = PORT)
        :_port(port)
        ,_stop(false)
    {

    }

    void initServer()
    {
       /*这段代码是用来忽略SIGPIPE信号的。
       SIGPIPE信号在网络编程中常见，它表示在读写socket时对方已经关闭连接，
       但继续读写会导致程序终止。通过调用signal(SIGPIPE, SIG_IGN)
       ，我们将SIGPIPE信号的处理方式设置为忽略，这样当出现SIGPIPE信号时，程序将不会终止，而是继续执行。*/
        signal(SIGPIPE, SIG_IGN);
        LOG(INFO, "http_server init success") ;
    }

    void loop()
    {
        TcpServer* tser = TcpServer::getinstance(_port);
        ThreadPool* tp = ThreadPool::getInstance();
        LOG(INFO, "loop begin") ;
        while (!_stop)
        {
            sockaddr_in peer; 
            socklen_t len = sizeof (peer) ;           
            LOG(INFO, "http_server————tcp server  linstening …… ");
            int listen_sock = accept(tser->get_sock(), (struct sockaddr*)&peer, &len); // 执行到此行不再执行
            if(0 > listen_sock)
            {
                continue; 
            }
            LOG(INFO, "get a new link"); 
            
            Task t(listen_sock) ;

            tp->pushTask(listen_sock);
        }
        
    }


};











